package com.xm.factory.service;

import cn.hutool.core.collection.CollUtil;
import com.xm.entity.UserEntity;
import com.xm.factory.service.impl.HjyConfigurationImpl;
import com.xm.factory.service.impl.TjbConfigurationImpl;
import com.xm.factory.service.impl.TqConfigurationImpl;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author tianqin
 * @Date 2024/7/29 15:09
 * 工厂
 */
public class ConfigurationFactory {
    /**
     * 保存 策略实现类 <接口名,具体策略实现类>
     */
    private final static Map<String, Configuration> STRATEGY_MAP = new ConcurrentHashMap<>(16);

    /**
     * 初始化map集合
     * 更好的方式应该是在spring加载类的时候进行自动初始化
     * 而不是手动维护类
     * @return
     */
    private static Map<String, Configuration> initMap() {
        STRATEGY_MAP.put("TQ", new TqConfigurationImpl());
        STRATEGY_MAP.put("TJB", new TjbConfigurationImpl());
        STRATEGY_MAP.put("HJY", new HjyConfigurationImpl());
        return STRATEGY_MAP;
    }

    /**
     * 根据map的key来获取实现类
     * @param mapKey    map的key
     * @return          实现类实例
     */
    public static UserEntity getImplByKey(String mapKey) {
        if (CollUtil.isEmpty(STRATEGY_MAP)){
            initMap();
        }
        return STRATEGY_MAP.get(mapKey).getUserConfiguration();
    }
}
